/**
 * 深度清除对象或数组中的 null 和 undefined 值
 * 支持任意嵌套层级、数组、对象
 * @param {any} obj - 要清理的对象或数组
 * @returns {any} 清理后的新对象或数组，已移除所有 null 和 undefined 值
 */
export function removeNullAndUndefined(obj) {
  // 处理 null 和 undefined
  if (obj === null || obj === undefined) {
    return undefined;
  }

  // 处理数组
  if (Array.isArray(obj)) {
    return obj
      .map(item => removeNullAndUndefined(item))  // 递归清理每一项
      .filter(item => item !== undefined);        // 移除清理后为 undefined 的项
  }

  // 处理普通对象
  if (typeof obj === 'object') {
    const cleaned = {};
    for (const [key, value] of Object.entries(obj)) {
      const cleanedValue = removeNullAndUndefined(value);
      if (cleanedValue !== undefined) {
        cleaned[key] = cleanedValue;
      }
    }
    return cleaned;
  }

  // 其他类型（字符串、数字、布尔值等）直接返回
  return obj;
}